Many modern applications (e.g. web-based services) require exceptionally correctness and highly responsive times and in addition the system providing these services must operate in a very correctly performing manner in a distributed environment.
Many modern applications, for example, web-based services, are based on request-reply services for their communication with clients or use a middleware component (that is, a form of Broker) to provide this communication across a distributed system.
Request-reply services (RRS) enable the clients to make requests to a specific service and attain responses. Request-reply is a message exchange pattern in which a requestor sends a request message to a replier system, which receives and processes the request, ultimately returning a message in response. This pattern is typically carried out over one channel.
The available RRS's typically require the users to provide functionalities in the context of pre-determined application programming interfaces (APIs) without extensibility. There is no means to capture the structure of a new set of functionalities in an object-oriented fashion. Applications implemented on top of the classic RRS's lack the capability to share functionalities. This leads to, among other things:                Complex applications        Inability to decompose functionalities into specific modules        Inability to share code        Inability or complication to implement specific security policies in different contexts        Inability or complications to implement specific throttling policies in different contexts        For instance, a travel agency API may combine conventional functionalities to book:        a flight        a hotel room        a rental car        
However, the functionalities are not shared, leading to the problems outlined above.